메모리 동적 할당
✒️ 2025-05-15 15:51 내용 수정
수제비 2024 정보처리기사 필기 5판 1권의 내용을 정리
TCPSchool의 내용을 정리
런타임에 사용자가 직접 메모리를 할당하는 것
- 메모리 구조 참고.
- 데이터 영역과 스택 영역에 할당되는 메모리의 크기는 컴파일 타임때 결정된다.
- 프로그램 실행 내내 두 영역에 할당된 메모리 크기는 고정된다.
- 힙 영역에 할당되는 메모리의 크기는 런타임에 사용자가 직접 결정한다.
- 메모리를 동적 할당했기 때문에 메모리 크기는 런타임 내내 변화한다.
malloc()
- 프로그램 실행 중 사용자가 직접 힙 영역에 메모리를 할당할 수 있도록 하는 함수다.
- 인수로 할당하고자 하는 메모리의 크기를 byte 단위로 받는다.
- 아직 할당되지 않았고 전달 받은 인수의 메모리 크기와 일치하는 블록을 찾아 해당 블록의 첫 번째 byte를 가리키는 주소값을 반환한다.
- 주소값을 반환하기에 메모리 공간에 접근 시 포인터를 사용해야 한다.
- 포인터 참고.
- 주소값을 반환하기에 메모리 공간에 접근 시 포인터를 사용해야 한다.
- 힙 영역에 할당할 수 있는 적당한 블록이 없다면 Null 포인터를 반환한다.
#include <stdlib.h>
void *malloc(size_t size);
size_t: 부호 없는 정수
free()
- 힙 영역에 할당 받은 메모리 공간을 다시 운영체제로 반환해주는 함수다.
- 인수로 해제하고자 하는 메모리 공간을 가리키는 포인터를 전달 ㅏㄷ는다.
free()함수로 다 사용한 메모리를 해제하지 않으면 메모리 누수가 발생할 수 있다.- 메모리 누수(memory leak) : 사용이 끝난 메모리를 해제하지 않아 메모리가 부족해지는 현상
#include <stdlib.h>
void free(void *ptr);
calloc()
malloc()처럼 힙 영역에 메모리를 동적 할당해주며, 메모리의 크기를 두 개의 인수로 나눠 전달받는 함수다.- 첫 번째 인수 : 메모리 블록의 개수
- 두 번째 인수 : 각 블록의 byte 수
- 메모리를 할당 받은 후 해당 메모리의 모든 비트값을 전부
0으로 초기화해준다.
#include <stdlib.h>
void *calloc(size_t nmemb, size_t size);
realloc()
- 이미 할당된 메모리의 크기를 바꾸어 재할당 할 때 사용하는 함수다.
- 첫 번째 인수 : 크기를 바꾸려는 메모리 공간을 가리키는 포인터
- NULL을 전달하면
malloc()과 같은 동작을 한다.
- NULL을 전달하면
- 두 번째 인수 : 재할당할 메모리 크기
- 첫 번째 인수 : 크기를 바꾸려는 메모리 공간을 가리키는 포인터
#include <stdlib.h>
void *realloc(void *ptr, size_t size);